package com.carple.servlet;

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

import com.carple.dao.MemberDao;
import com.carple.dto.Member;
import com.carple.dto.UploadFile;


@WebServlet("/member/modify.action")
public class MemberModifyServlet extends HttpServlet{

	
	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		
//		String emailId = req.getParameter("emailId");
//		String passwd = req.getParameter("passwd");
//		String gender = req.getParameter("gender");
//		String isOwner = req.getParameter("isOwner");
//		String carModel = req.getParameter("carModel");
//		String nickName = req.getParameter("nickName");
//		String realName = req.getParameter("realName");
//		
//		HttpSession session = req.getSession(); //서블릿에서는 세션이 기본 객체가 아니므로 이렇게 뽑는다    --> 맨처음 이것만 썻는데....안됨..
//		Member member =  (Member)session.getAttribute("loginuser");//세션에 있는것도 바꿔야한다.
//		
//		member.setEmailId(emailId);
//		member.setPasswd(passwd);		 
//		member.setGender(gender);
//		member.setIsOwner(isOwner);
//		member.setCarModel(carModel);
//		member.setNickName(nickName);
//		member.setRealName(realName);
//		
//		MemberDao dao = new MemberDao();
//		dao.modifyMember(member);
//		
//		resp.sendRedirect("/carple/index.jsp");
			
/////////////////////////////////////////////////////////////////////////////
		//요청이 multipart/form-data 형식인지 확인
		boolean isMultipart = 
			ServletFileUpload.isMultipartContent(req);

		if (isMultipart) {//파일 업로드 요청인 경우
			
			//임시파일 저장 경로 생성
			//가상경로 (http://.....) -> 물리 경로 (C:/....)	
			String tempPath = 
				req.getServletContext().getRealPath("/profile/temp"); //다운로드를 통해서만 접근 가능!!!
			File tempDirectory = new File(tempPath);
			
			//최종 파일 저장 경로 생성
			String uploadPath = 
				req.getServletContext().getRealPath("/profile/file");
			//File uploadDirectory = new File(uploadPath);
			
			//FileUploader 객체의 생성기 -> 객체의 설정을 적용하는 곳
			DiskFileItemFactory factory = new DiskFileItemFactory();
			//temp 폴더에 저장 여부를 결정하는 크기 기준
			//아래는 1M 이상되는 파일은 임시폴더에 저장했다가 이동하도록 설정
			factory.setSizeThreshold(1024 * 1024);
			factory.setRepository(tempDirectory);//임시 파일 저장 경로 지정
			
			//실제 파일 업로드를 수행하는 객체 -> 위의 팩토리 객체를 통해서 생성	
			ServletFileUpload uploader = new ServletFileUpload(factory);
			uploader.setFileSizeMax(1024 * 1024 * 10);//최대 파일 크기
			
			Member member = new Member();//자료 정보 저장
			UploadFile file = null;
			
			try {
				//parseRequest : 요청 정보를 처리해서 단위 별로 객체화한 배열을 반환			
				List<FileItem> items = uploader.parseRequest(req);
				for (int i = 0; i < items.size(); i++) {
					FileItem item = items.get(i);
					if (item.isFormField()) {//현재 요소가 일반 입력 요소인지?
						if (item.getFieldName().equals("emailId"))
							member.setEmailId(item.getString("utf-8"));
						else if (item.getFieldName().equals("passwd"))
							member.setPasswd(item.getString("utf-8"));
						else if (item.getFieldName().equals("gender"))
							member.setGender(item.getString("utf-8"));
						else if (item.getFieldName().equals("isOwner"))
							member.setIsOwner(item.getString("utf-8"));
						else if (item.getFieldName().equals("carModel"))
							member.setCarModel(item.getString("utf-8"));
						else if (item.getFieldName().equals("nickName"))
							member.setNickName(item.getString("utf-8"));
						else if (item.getFieldName().equals("realName"))
							member.setRealName(item.getString("utf-8"));
					} else {//파일 요소?
						//uploadfile 객체에 데이터 저장
						if (item.getSize() > 0) {
							String fileName = item.getName();
							
							String ext = 
								fileName.substring(fileName.lastIndexOf("."));
										
							System.out.println("멤버 닉네임:"+member.getNickName());
							System.out.println("ext :"+ext);
							String savedName = member.getNickName()+ext;
							System.out.println("savedName :"+savedName);
							File uploadFile = new File(uploadPath, savedName);
							item.write(uploadFile);//파일 저장
							item.delete();//임시 파일 삭제
							
							file = new UploadFile(); //첨부파일정보저장
							file.setEmailId(member.getEmailId());
							file.setSavedFileName(savedName);
							file.setUserFileName(fileName);
						}
					}
				}
				
				//upload 객체, files 목록의 객체를 DB에 저장
				MemberDao dao = new MemberDao();
				dao.modifyMember(member);
				if(file!=null){
				dao.insertProfileFile(file);
				}
			} catch (Exception ex) {
				ex.printStackTrace();
			}
		}
		resp.sendRedirect("/carple/index.jsp");

	}
		
	
	
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {

		req.setCharacterEncoding("utf-8");
		
		doGet(req, resp);	
	}
	
}
